It is advantageous to have the capability to test how a high-availability, fault-tolerant system, such as a server computer, responds to various fault conditions to insure that the system is indeed fault tolerant. In order to test how a system behaves during fault conditions, faults must be injected during testing by some means. Conventionally, faults are injected into a system by creating special “bugged” hardware. A bugged hardware test tool consists of a customized subassembly with switches to short or open, for example, one or more sensor lines. The bugged test tool might also contain an externally accessible variable resistor to change the value of a sensor. Other hardware test tools create hardware faults for control outputs like a motor drive signal. These bugged hardware test tools are designed specifically for the types of faults to be tested.
An alternate method for inducing faults is to change threshold values in the software or firmware code that controls the system. However, when changing threshold values to test downstream code paths, often many thresholds have to be changed in a coordinated fashion. For example, “warning” and “critical” thresholds for a single sensor input would need to be changed in a coordinated way. This approach also has the disadvantage of altering the code to be tested.
Therefore, there remains a need for a technique of controlling a system which employs an embedded mechanism for selectively testing the system's fault-handling capability, and which utilizes the same system control code as in normal system operation and which is not limited to testing only those faults induced by bugged hardware.